<template>
  <v-app>
    <v-container class="pa-3">
      <div class="d-flex align-center mb-2">
        <h3 class="text-h6 mb-0">{{ t('ai.title') }}</h3>
      </div>

      <v-text-field
        v-model="query"
        clearable
        :disabled="loading"
        :label="t('ai.placeholder')"
        @keydown.enter="onSend"
      />

      <div class="d-flex gap-2 mb-2">
        <v-btn color="primary" :loading="loading" @click="onSend">{{ t('ai.ask') }}</v-btn>
        <v-btn variant="text" @click="clearAll">{{ t('ai.clear') }}</v-btn>
      </div>

      <v-divider class="my-2" />

      <div v-if="messages.length === 0" class="text-medium-emphasis text-caption">
        {{ t('ai.hint') }}
      </div>

      <div v-else class="results">
        <div v-for="(msg, i) in messages" :key="i" class="mb-3">
          <div class="text-caption text-disabled">
            {{ msg.role === 'user' ? t('ai.you') : t('ai.ai') }}
          </div>
          <v-card :variant="msg.role === 'user' ? 'tonal' : 'flat'">
            <v-card-text class="text-body-2" style="white-space: pre-wrap">{{
              msg.content
            }}</v-card-text>
          </v-card>
        </div>
      </div>
    </v-container>
  </v-app>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { useSystemStateListener } from '@/composables/useSystemStateListener'

// 启动系统状态监听器（保持原有行为）
useSystemStateListener()

const { t } = useI18n()

type Mode = 'findPerson' | 'analyzePerson' | 'findCompany' | 'analyzeCompany'

function classifyIntent(q: string): Mode {
  const text = q.toLowerCase()
  const zh = q
  const hasCompany =
    /公司|企业|集团|有限|corp|inc|ltd/i.test(zh) || /company|corp|inc|ltd/.test(text)
  const hasPerson =
    /人|姓名|候选|联系人|简历|履历/.test(zh) || /person|people|candidate|contact/.test(text)
  const hasAnalyze = /分析|研判|洞察|风险/.test(zh) || /analy(s|z)e|insight|risk/.test(text)

  if (hasCompany && !hasPerson) return hasAnalyze ? 'analyzeCompany' : 'findCompany'
  if (hasPerson && !hasCompany) return hasAnalyze ? 'analyzePerson' : 'findPerson'
  if (hasAnalyze) return hasCompany ? 'analyzeCompany' : 'analyzePerson'
  return hasCompany ? 'findCompany' : 'findPerson'
}

const query = ref('')
const loading = ref(false)
const messages = ref<Array<{ role: 'user' | 'assistant'; content: string }>>([])

function buildPrompt(q: string) {
  const m = classifyIntent(q)
  const base = {
    findPerson:
      '你是线索搜寻助手，目标是根据查询描述给出可能的人选线索与获取路径，返回结构化要点。',
    analyzePerson:
      '你是人物洞察助手，基于公开资料分析人物背景、履历、关系网与风险点，返回要点与建议。',
    findCompany: '你是公司查找助手，依据关键词与线索给出可能匹配的公司列表与判断依据。',
    analyzeCompany: '你是公司分析助手，从业务、财务、竞争、风险、机会等维度给出简要分析。'
  }[m]
  return `${base}\n\n用户问题：${q}`
}

async function askAi(prompt: string): Promise<string> {
  // 如已存在预加载 API（_pre_.ai.ask），优先调用
  try {
    // @ts-ignore
    const api = (window as any)?._pre_?.ai?.ask
    if (typeof api === 'function') {
      const res = await api(prompt)
      return typeof res === 'string' ? res : JSON.stringify(res)
    }
  } catch {
    // 忽略，回退到本地 mock
  }

  // 本地 mock：先让页面可用，后续再对接真实模型
  const m = classifyIntent(query.value)
  if (m === 'findPerson') {
    return `为 “${query.value}” 提供候选人线索：\n1) 姓名A（公司/职位）- 线索来源与下一步操作\n2) 姓名B（公司/职位）- 线索来源与下一步操作\n…\n\n建议：先从 LinkedIn / 公司官网 / 新闻稿 入手。`
  }
  if (m === 'analyzePerson') {
    return `人物 “${query.value}” 分析要点：\n- 背景/教育/履历\n- 公开信息中的合作/关系\n- 风险与舆情\n- 洞察与下一步建议`
  }
  if (m === 'findCompany') {
    return `与 “${query.value}” 相关的公司候选：\n- 公司A（理由/匹配点）\n- 公司B（理由/匹配点）\n…\n\n下一步：用统一口径在企查查/天眼查/官网核验。`
  }
  return `公司 “${query.value}” 分析：\n- 业务与产品\n- 行业与竞争\n- 财务与增长（若有公开数据）\n- 风险与合规\n- 机会与建议`
}

async function onSend() {
  const q = query.value.trim()
  if (!q || loading.value) return

  messages.value.push({ role: 'user', content: q })
  loading.value = true
  try {
    const reply = await askAi(buildPrompt(q))
    messages.value.push({ role: 'assistant', content: reply })
  } catch (error: any) {
    messages.value.push({ role: 'assistant', content: `出错：${error?.message || String(error)}` })
  } finally {
    loading.value = false
  }
}

function clearAll() {
  messages.value = []
  query.value = ''
}
</script>

<style scoped>
.results {
  max-height: 65vh;
  overflow: auto;
}
</style>

<i18n>
{
  "zhHans": {
    "ai": {
      "title": "AI 智能搜索",
      "placeholder": "请输入：找人/分析人/找公司/分析公司 的需求描述...",
      "ask": "发送",
      "clear": "清空",
      "hint": "直接输入你的问题，系统会自动识别意图，例如：‘找人：上海从事半导体设备销售的渠道负责人’ 或 ‘分析公司：某某科技’",
      "you": "你",
      "ai": "AI",
      "modes": {
        "findPerson": "找人",
        "analyzePerson": "分析人",
        "findCompany": "找公司",
        "analyzeCompany": "分析公司"
      }
    }
  },
  "en": {
    "ai": {
      "title": "AI Assistant",
      "placeholder": "Describe your need: find/analyze person or company...",
      "ask": "Send",
      "clear": "Clear",
      "hint": "Just type your question; the system will infer intent, e.g., 'Find person: ...' or 'Analyze company: ...'",
      "you": "You",
      "ai": "AI",
      "modes": {
        "findPerson": "Find Person",
        "analyzePerson": "Analyze Person",
        "findCompany": "Find Company",
        "analyzeCompany": "Analyze Company"
      }
    }
  }
}
</i18n>
